<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class banco extends MY_Controller {
	/**
	 * Evita la validacion (enfocado cuando se usa ajax). Ver mas en privilegios_model
	 * @var unknown_type
	 */
	private $excepcion_privilegio = array(
			'banco/edc_pdf/');
	
	public function _remap($method){
		$this->carabiner->css(array(
				array('libs/jquery-ui.css', 'screen'),
				array('libs/ui.notify.css', 'screen'),
				array('libs/jquery.treeview.css', 'screen'),
				array('base.css', 'screen')
		));
		$this->carabiner->js(array(
				array('libs/jquery.min.js'),
				array('libs/jquery-ui.js'),
				array('libs/jquery.notify.min.js'),
				array('libs/jquery.treeview.js'),
				array('general/alertas.js')
		));
		
		$this->load->model("empleados_model");
		if($this->empleados_model->checkSession()){
			$this->empleados_model->excepcion_privilegio = $this->excepcion_privilegio;
			$this->info_empleado = $this->empleados_model->getInfoEmpleado($_SESSION['id_empleado'], true);
			if($this->empleados_model->tienePrivilegioDe('', get_class($this).'/'.$method.'/')){
				$this->{$method}();
			}else
				redirect(base_url('panel/home?msg=1'));
		}else
			redirect(base_url('panel/home'));
	}
	
	/**
	 * ESTADOS DE CUENTAS
	 * Default. Mustra el estado de cuenta de una cuenta seleccionada
	 */
	public function index(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('libs/jquery.superbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('libs/jquery.superbox.js'),
			array('general/msgbox.js'),
			array('banco/estados_cuenta.js')
		));
		$this->load->library('pagination');
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Banco'; //activa la opcion del menu
		$params['seo'] = array(
				'titulo' => 'Estados de Cuentas'
		);
		
		$this->load->model('banco_model');
		$params['cuentas'] = $this->banco_model->obtenCuentas(100);
		
		$params['ec'] = $this->banco_model->getEstadoCuentaData($params['cuentas']['cuentas']);
		
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
	
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/banco/estadoCuentas', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Descarga el estado de cuenta en PDF para una cuenta
	 */
	public function edc_pdf(){
		$this->load->model('banco_model');
		$this->banco_model->estadoCuentaPdf();
	}
	
	/**
	 * Agrega una operacion utilizando el superbox
	 */
	public function agregar_operacion(){
		$this->carabiner->css(array(
			array('general/forms.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.numeric.js'),
			array('banco/estados_cuenta.js')
		));
	
		$params['seo'] = array(
				'titulo' => 'Agregar Operación'
		);
	
		if(isset($_GET['id']{0})){
			$this->load->library('form_validation');
			$rules = array(
				array('field'	=> 'dfecha',
						'label'	=> 'Fecha',
						'rules'	=> 'required|max_length[10]|callback_isValidDate'),
				array('field'	=> 'dconcepto',
						'label'	=> 'Concepto',
						'rules'	=> 'required|max_length[120]'),
				array('field'	=> 'dmonto',
						'label'	=> 'Monto',
						'rules'	=> 'required|numeric'),
				array('field'	=> 'dtipo',
						'label'	=> 'Tipo',
						'rules'	=> 'required|max_length[2]'),
				array('field'	=> 'dactor',
						'label'	=> 'Cliente/Proveedor',
						'rules'	=> ''),
				array('field'	=> 'did_actor',
						'label'	=> 'Cliente/Proveedor',
						'rules'	=> 'max_length[25]'),
				array('field'	=> 'dforma_pago',
						'label'	=> 'Forma de pago',
						'rules'	=> ''));
			$this->form_validation->set_rules($rules);
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()), 'Operacion!');
			}else{
				$this->load->model('banco_model');
				$respons = $this->banco_model->addOperacion();
		
				if($respons[0]){
					$params['load_operaciones'] = true;
					$params['frm_errors'] = $this->showMsgs(7, '', 'Operacion!');
				}
			}
		
			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg'], '', 'Operacion!');
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	
		$this->load->view('panel/banco/agregar_operacion', $params);
	}
	
	/**
	 * Elimina la operacion de una cuenta bancaria
	 */
	public function eliminar_operacion(){
		if(isset($_GET['id']{0})){
			$this->load->model('banco_model');
			$respons = $this->banco_model->eliminaOperacion();
				
			if($respons[0])
				redirect(base_url('panel/banco/?msg=6'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	
	
	/**
	 * CUENTAS BANCARIAS
	 * 
	 * Mustra el listado de cuentas para administrarlas
	 */
	public function cuentas(){
		$this->carabiner->css(array(
			array('libs/jquery.msgbox.css', 'screen'),
			array('general/forms.css', 'screen'),
			array('general/tables.css', 'screen')
		));
		$this->carabiner->js(array(
			array('libs/jquery.msgbox.min.js'),
			array('general/msgbox.js')
		));
		$this->load->library('pagination');
	
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Banco'; //activa la opcion del menu
		$params['seo'] = array(
				'titulo' => 'Administrar cuentas'
		);
	
		$this->load->model('banco_model');
		$params['cuentas'] = $this->banco_model->obtenCuentas();
	
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);

		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/banco/listado', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Agrega una cuenta a la bd
	 */
	public function agregar_cuenta(){
		$this->carabiner->css(array(
			array('general/forms.css', 'screen')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Banco'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Agregar cuenta'
		);
		
		$this->configAddModCuenta();
		
		if($this->form_validation->run() == FALSE){
			$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
		}else{
			$this->load->model('banco_model');
			$respons = $this->banco_model->addCuenta();
			
			if($respons[0])
				redirect(base_url('panel/banco/agregar_cuenta/?'.String::getVarsLink(array('msg')).'&msg=4'));
		}
		
		if(isset($_GET['msg']{0}))
			$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/banco/agregar', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * modifica la info de una cuenta
	 */
	public function modificar_cuenta(){
		$this->carabiner->css(array(
				array('general/forms.css', 'screen')
		));
		
		$params['info_empleado'] = $this->info_empleado['info']; //info empleado
		$params['opcmenu_active'] = 'Banco'; //activa la opcion del menu
		$params['seo'] = array(
			'titulo' => 'Modificar cuenta'
		);
		
		if(isset($_GET['id']{0})){
			$this->configAddModCuenta();
			$this->load->model('banco_model');
			
			if($this->form_validation->run() == FALSE){
				$params['frm_errors'] = $this->showMsgs(2, preg_replace("[\n|\r|\n\r]", '', validation_errors()));
			}else{
				$respons = $this->banco_model->updateCuenta();
				
				if($respons[0])
					redirect(base_url('panel/banco/modificar_cuenta/?'.String::getVarsLink(array('msg')).'&msg=3'));
			}
			
			$params['cuenta'] = $this->banco_model->getInfoCuenta($_GET['id']);
			if(!is_object($params['cuenta']))
				unset($params['cuenta']);
			
			if(isset($_GET['msg']{0}))
				$params['frm_errors'] = $this->showMsgs($_GET['msg']);
		}else
			$params['frm_errors'] = $this->showMsgs(1);
		
		$this->load->view('panel/header', $params);
		$this->load->view('panel/general/menu', $params);
		$this->load->view('panel/banco/modificar', $params);
		$this->load->view('panel/footer');
	}
	
	/**
	 * Elimina una cuenta de la bd
	 */
	public function eliminar_cuenta(){
		if(isset($_GET['id']{0})){
			$this->load->model('banco_model');
			$respons = $this->banco_model->deleteCuenta();
			
			if($respons[0])
				redirect(base_url('panel/banco/cuentas/?msg=5'));
		}else
			$params['frm_errors'] = $this->showMsgs(1);
	}
	
	
	/**
	 * Configura los metodos de agregar y modificar
	 */
	private function configAddModCuenta(){
		$this->load->library('form_validation');
		$rules = array(
			array('field'	=> 'dnombre',
					'label'		=> 'Nombre',
					'rules'		=> 'required|max_length[60]'),
			array('field'	=> 'dnumero',
					'label'		=> 'Numero',
					'rules'		=> 'max_length[18]')
		);
		$this->form_validation->set_rules($rules);
	}
	
	/**
	 * Form_validation: Valida su una fecha esta en formato correcto
	 */
	public function isValidDate($str){
		if($str != ''){
			if(String::isValidDate($str) == false){
				$this->form_validation->set_message('isValidDate', 'El campo %s no es una fecha valida');
				return false;
			}
		}
		return true;
	}
	
	/**
	 * Muestra mensajes cuando se realiza alguna accion
	 * @param unknown_type $tipo
	 * @param unknown_type $msg
	 * @param unknown_type $title
	 */
	private function showMsgs($tipo, $msg='', $title='Privilegio!'){
		switch($tipo){
			case 1:
				$txt = 'El campo ID es requerido.';
				$icono = 'error';
			break;
			case 2: //Cuendo se valida con form_validation
				$txt = $msg;
				$icono = 'error';
			break;
			case 3:
				$txt = 'La cuenta se modifico correctamente.';
				$icono = 'ok';
			break;
			case 4:
				$txt = 'La cuenta se agrego correctamente.';
				$icono = 'ok';
			break;
			case 5:
				$txt = 'La cuenta se elimino correctamente.';
				$icono = 'ok';
			break;
			case 6:
				$txt = 'La operación se elimino correctamente.';
				$icono = 'ok';
			break;
			case 7:
				$txt = 'La operación se agrego correctamente.';
				$icono = 'ok';
			break;
		}
		
		return array(
			'title' => $title,
			'msg' => $txt,
			'ico' => $icono);
	}
}

?>